<!--
  功能：功能描述
  作者：kangjie
  邮箱：kangjie@briup.com
  时间：2021年12月20日 15:13:54
  版本：v1.0
  修改记录：
  修改内容：
  修改人员：
  修改时间：
-->
<template>
  <div class="categoryPage">
    <div class="header">
      <el-button type="primary" @click="addInfoCategory()">添加</el-button>
      <el-button type="danger" @click="deleteInfoCategory(parentID)">删除</el-button>
      <el-input v-model="parentID" style="width: 220px" placeholder="请输入要删除的父目录id" clearable></el-input>
    </div>
    <div class="content">
      <!-- 折叠面板 -->
      <el-collapse accordion>
        <el-collapse-item :title="item.id+'__'+item.name+'('+item.children.length+')'" :name="item.id" v-for="item in infoCategorys" :key="item.id">
          <!-- {{item.children}} -->
          <el-table :data="item.children" stripe style="width: 100%" :show-header="true">
            <!-- 名称 -->
            <el-table-column prop="name" label="名称" width="180" align="center">
            </el-table-column>
            <!-- 排序号 -->
            <el-table-column prop="no" label="排序号" width="180" align="center">
            </el-table-column>
            <!-- 父栏目 -->
            <el-table-column prop="parentId" label="父栏目" align="center"> </el-table-column>
            <!-- 描述 -->
            <el-table-column prop="description" label="描述" align="center"> </el-table-column>
            <!-- 操作 -->
            <el-table-column prop="" label="操作" align="center">
              <template slot-scope="scope">
                <div>
                  <el-button type="danger" icon="el-icon-delete" circle @click="deleteInfoCategory(scope.row.id)"></el-button>
                  <el-button type="primary" icon="el-icon-edit" circle @click="editInfoCategory(scope.row)"></el-button>
                </div>
              </template>
            </el-table-column>
          </el-table>
        </el-collapse-item>
      </el-collapse>
    </div>
    <!-- 对话框 -->
    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
      <el-form :model="infoCategoryForm" :rules="rules" ref="infoCategoryFormRef" label-width="100px" class="demo-ruleForm">
        <!-- 名称 -->
        <el-form-item label="名称" prop="name">
          <el-input v-model="infoCategoryForm.name"></el-input>
        </el-form-item>
        <!-- 序号 -->
        <el-form-item label="序号" prop="no">
          <el-input v-model="infoCategoryForm.no"></el-input>
        </el-form-item>
        <!-- 父栏目 -->
        <el-form-item label="父栏目" prop="parentId">
          <el-select v-model="infoCategoryForm.parentId" clearable placeholder="请选择">
            <!-- {{infoCategoryForm.parentId}} -->
            <el-option
              v-for="item in infoCategorys"
              :key="item.id"
              :label="item.name"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="handleClose">取 消</el-button>
        <el-button type="primary" @click="submitForm">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import { mapState, mapActions } from "vuex";
import { get, post } from '@/utils/request';
export default {
  // 组件名称
  name: "demo",
  // 组件参数 接收来自父组件的数据
  props: {},
  // 组件状态值
  data() {
    return {
      parentID:'',
      dialogTitle: '新增资讯类型',
      dialogVisible: false,
      infoCategoryForm:{
        name:"",
        no: "",
        parentId: "",
      },
      rules: {
        name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
        no: [{ required: false, message: '请输入序号', trigger: 'blur' }],
        parentId: [{required:false, message:"请选择父栏目", trigger:'change'}]
      },
    };
  },
  // 计算属性
  computed: {
    ...mapState("infoCategory", ["infoCategorys", "allInfoCategorys"]),
  },
  // 侦听器
  watch: {},
  // 组件方法
  methods: {
    ...mapActions("infoCategory", ["getInfoCategorys", "getAllInfoCategorys"]),
    getInfoCategorysData() {
      this.getInfoCategorys();
    },

    deleteInfoCategory(curRowId){
      console.log(curRowId)
        this.$confirm('确认删除？')
          //确认按钮事件
          .then(_ => {
            get('/category/deleteById', {
              id: curRowId
            }).then(res => {
              this.$message({
                type: 'success',
                message: '删除成功!'
              });
              this.getInfoCategorysData();
            })
          })
          // 取消按钮事件
          .catch(_ => {});
    },



    editInfoCategory(curRow){
      this.infoCategoryForm = { ...curRow }
      this.dialogTitle = '修改资讯类型信息'
      this.dialogVisible = true
    },

    addInfoCategory() {
      this.infoCategoryForm = {

      }
      this.dialogTitle = '新增资讯类型'
      this.dialogVisible = true
    },

    handleClose() {
      this.$confirm('确认关闭？')
        // 确认按钮事件
        .then((_) => {
          // 清空表单的数据 和 验证表单信息
          this.$refs['infoCategoryFormRef'].resetFields()
          this.dialogVisible = false
          done()
        })
        // 取消按钮事件
        .catch((_) => {})
    },

    submitForm() {
      this.$refs['infoCategoryFormRef'].validate((valid) => {
        this.dialogVisible = false
        if (valid) {
          post('/category/saveOrUpdate', this.infoCategoryForm).then(
            (res) => {
              if (res.status == 200) {
                this.$message({
                  title: '成功',
                  message: res.message,
                  type: 'success'
                })
                this.getInfoCategorysData()
                this.loading = false
                this.dialogVisible = false
              } else {
                this.$message({
                  title: '失败',
                  message: res.message,
                  type: 'danger'
                })
              }
            }
          )
        } else {
          return false
        }
      })
    },
  },
  // 以下是生命周期钩子
  /**
   * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
   */
  created() {
    this.getInfoCategorysData();
  },
  /**
   * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
   * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
   */
  mounted() {},
  /**
   * 实例销毁之前调用。在这一步，实例仍然完全可用。
   */
  beforeDestroy() {},
  /**
   * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
   * 所有的事件监听器会被移除，所有的子实例也会被销毁。
   */
  destroyed() {},
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>
.header .el-button--danger{
  float: right;
}
.el-input{
  float: right;
}
</style>
